# -*- coding:utf-8 -*-


class CacheSession:
	session_container = {}

	def __init__(self, handler, session_id='__kckckc__'):
		self.handler = handler
		self.session_id = session_id
		self.random_str = None  # 默认为None

	def __genarate_random_str(self):  # 以`__`命名的方法，只有类内部能调用
		import hashlib
		import time
		obj = hashlib.md5()
		obj.update(str(time.time()))
		random_str = obj.hexdigest()
		return random_str

	def __setitem__(self, key, value):
		# 在container中加入随机字符串
		# 定义专属于自己的数据
		# 在客户端中写入随机字符串
		# 判断，请求的用户是否已有随机字符串
		if not self.random_str:
			random_str = self.handler.get_cookie(self.session_id)
			if not random_str:
				random_str = self.__genarate_random_str()
				CacheSession.session_container[random_str] = {}
				# self.handler.set_cookie(Session.ss_id, random_str)  # 若定了超时时间，则必须写最后
			else:
				# 如果服务端丢失了，但客户端还有  --此时重新创建一个
				if random_str in CacheSession.session_container.keys():
					pass
				else:
					random_str = self.__genarate_random_str()
					CacheSession.session_container[random_str] = {}
			self.random_str = random_str

		CacheSession.session_container[self.random_str][key] = value
		self.handler.set_cookie(self.session_id, self.random_str)

	def __getitem__(self, key):
		# 获取客户端的随机字符串
		# 从container中获取专属于我的数据
		# 专属信息[key]
		random_str = self.handler.get_cookie(self.session_id)
		# 用户没有登录过，则字符串为空
		if not random_str:
			return None
		user_info_dict = CacheSession.session_container.get(random_str, None)
		# 客户端有随机字符串，再判断服务端是否有
		if not user_info_dict:  # 没有
			return None
		# 有，此时user_info_dict为字典
		value = user_info_dict.get(key, None)
		return value